home *** CD-ROM | disk | FTP | other *** search
/ PC-SIG: World of Games / PC-SIG World of Games (CDRM1080710) (1993).iso / ENT / DISK1833.ZIP / SAPPH112.ARC / HANGUP.PAS < prev    next >
Pascal/Delphi Source File  |  1989-07-31  |  3KB  |  110 lines

  1. PROGRAM HangUp;
  2.  
  3. {
  4.  
  5.   USAGE:    HANGUP <PORT ADDRESS IN DECIMAL> <BAUD RATE>
  6.  
  7.   EXAMPLE:  HANGUP 1016 300       <--- Hang up COM1 and reset to 300 baud
  8.  
  9.             HANGUP 760 9600       <--- Hang up COM2 and reset to 9600 baud
  10.  
  11.             HANGUP                <--- COM1 and 1200 baud are assumed
  12.  
  13. }
  14.  
  15. USES CRT;
  16.  
  17. CONST  { Serial Control }
  18.   RReady           = 1;
  19.   TReady           = $20;
  20.   BaudConst : real = 115200.0;
  21.  
  22. VAR
  23.   BaudRate      : INTEGER;
  24.   Com1Base      : INTEGER;
  25.   DataPort      : INTEGER;
  26.   HighBaud      : INTEGER;
  27.   IntReg        : INTEGER;
  28.   InitBaud      : INTEGER;
  29.   LowBaud       : INTEGER;
  30.   LineContrl    : INTEGER;
  31.   ModemContrl   : INTEGER;
  32.   ModemStatus   : INTEGER;
  33.   StatusPort    : INTEGER;
  34.   VALRetCode    : INTEGER;
  35.  
  36. PROCEDURE Logo;
  37. BEGIN
  38.   WRITELN;
  39.   WRITELN('┌──────────────────────────────────────────────────────┬──────────────────┐');
  40.   WRITELN('│  Pinnacle Software''s  Handy-Dandy  Modem  Hanger-Up  │      HANGUP      │');
  41.   WRITELN('├──────────────────────────────────────────────────────┴──────────────────┤');
  42.   WRITELN('│  C O P Y R I G H T  (C)  1988  BY   P I N N A C L E    S O F T W A R E  │');
  43.   WRITELN('│  P.O. Box 386,  Town of Mount Royal, Montreal, Quebec, Canada  H3P 3C6  │');
  44.   WRITELN('└─────────────────────────────────────────────────────────────────────────┘');
  45.   WRITELN;
  46. END;
  47.  
  48. PROCEDURE GetAddresses;
  49. BEGIN
  50.   LowBaud     := Com1Base;
  51.   HighBaud    := Com1Base + 1;
  52.   DataPort    := Com1Base;
  53.   IntReg      := Com1Base + 1;
  54.   LineContrl  := Com1Base + 3;
  55.   ModemContrl := Com1Base + 4;
  56.   StatusPort  := Com1Base + 5;
  57.   ModemStatus := Com1Base + 6;
  58. END;
  59.  
  60. PROCEDURE SetBaud(SBRate : INTEGER);
  61. BEGIN
  62.   BaudRate          := SBRate;
  63.   PORT[IntReg]      := 0;
  64.   PORT[LineContrl]  := $80;
  65.   PORT[LowBaud]     := LO(TRUNC(BaudConst / BaudRate));
  66.   PORT[HighBaud]    := HI(TRUNC(BaudConst / BaudRate));
  67.   PORT[LineContrl]  := 3;
  68.   PORT[ModemContrl] := 3;
  69. END;
  70.  
  71. PROCEDURE ExtractParms;
  72. BEGIN
  73.   IF LENGTH(PARAMSTR(1)) = 0
  74.   THEN Com1Base := 1016
  75.   ELSE
  76.   BEGIN
  77.     VAL(PARAMSTR(1),Com1Base,VALRetCode);
  78.     IF VALRetCode <> 0 THEN
  79.     BEGIN
  80.       WRITELN('HANGUP:  Invalid COMM port address:  ',PARAMSTR(1));
  81.       HALT(1);
  82.     END;
  83.   END;
  84.   IF LENGTH(ParamStr(2)) = 0
  85.   THEN InitBaud := 1200
  86.   ELSE
  87.   BEGIN
  88.     VAL(PARAMSTR(2),InitBaud,VALRetCode);
  89.     IF VALRetCode <> 0 THEN
  90.     BEGIN
  91.       WRITELN('HANGUP:  Invalid initializing baudrate:  ',PARAMSTR(2));
  92.       WRITELN('         1200 assumed.');
  93.       InitBaud := 1200;
  94.     END;
  95.   END;
  96. END;
  97.  
  98. PROCEDURE DropReady;
  99. BEGIN
  100.    PORT[ModemContrl] := 0;
  101.    DELAY(750);
  102.    SetBaud(InitBaud);
  103. END;
  104.  
  105. BEGIN
  106.   Logo;
  107.   ExtractParms;
  108.   GetAddresses;
  109.   DropReady;
  110. END.